<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>获取字符串最长连续字母</title>
    <script>
      //获取字符串最长连续字母
      //eg: "mmmiijjjjkkkkkkssptr" 返回"kkkkkk"
      function maxRepeatChar(str) {
        /*1, 将'连续'字母当成整体分隔为一个数组项
         *2，遍历返回每个数组项字符长度
         *3，获取最长字符串索引，打印输出
         */
        //步骤1：
        var repeatStrArr = []; //存放重复字母字符串的数组
        var tempStrStart = 0; //重复字符串起始序号
        var tempStrEnd = 0; //重复字符串结束序号
        var i = 0; //初始变量
        while (i <= str.length) {
          //上一个字符与下一个字符相等，
          //重复结束序号等于当前字符下标 + 2，保证可以获取所有重复字段
          if (str.charAt(i) === str.charAt(i + 1)) {
            tempStrEnd = i + 2;
          } else {
            //当字符不重复时，结束下标加 1，保证可以获取非重复字段
            if (tempStrStart === tempStrEnd) {
              tempStrEnd += 1;
            }
            //上一个字符与下一个字符不相等，取出重复字符串，并存入数组
            repeatStrArr.push(str.slice(tempStrStart, tempStrEnd)); // ["mmm", "ii", "jjjj", "kkkkkk", "ss", "p", "t", "r"]
            // console.log("start：", tempStrStart, "end:", tempStrEnd);
            //重复字符串起始序号赋值为上一个重复字符结束下标
            tempStrStart = tempStrEnd;
          }
          i++;
        }
        console.log(repeatStrArr);
        /* 
        步骤一简短写法：利用正则匹配获取连续重复字符

        */
        //  //说明：正则按编号反向引用\1, 引用与捕获组(\w)相匹配的单个字符，以达到匹配连续重复字符的目的
        //  repeatStrArr = str.match(/(\w)\1*/g);
        // 步骤二：
        var repeatStrArrLength = repeatStrArr.map((m) => m.length);
        // 步骤三：
        var maxIndex = repeatStrArrLength.indexOf(Math.max(...repeatStrArrLength));
        //最后，打印出最长重复字符
        console.log(repeatStrArr[maxIndex]);
      }
      maxRepeatChar("mmmiijjjjkkkkkkssptr"); //kkkkkk
    </script>
  </head>
  <body></body>
</html>
